using CommunityToolkit.Mvvm.ComponentModel;
using System;

namespace Sensor.UI.ViewModels;

/// <summary>
/// 视图模型基类，提供属性变更通知和资源释放功能
/// </summary>
/// <remarks>
/// 所有视图模型的基类，继承自 CommunityToolkit.Mvvm.ComponentModel.ObservableObject
/// 提供了 INotifyPropertyChanged 接口的实现，支持属性变更通知
/// 使用 partial 关键字允许在其他部分类中定义属性和方法
/// </remarks>
public partial class ViewModelBase : ObservableObject, IDisposable
{
    #region 私有字段

    /// <summary>
    /// 标识资源是否已释放
    /// </summary>
    private bool _disposed = false;

    #endregion

    #region 构造函数

    /// <summary>
    /// 初始化 ViewModelBase 类的新实例
    /// </summary>
    public ViewModelBase()
    {
        // 初始化逻辑可以在这里添加
    }

    #endregion

    #region 资源释放

    /// <summary>
    /// 释放资源
    /// </summary>
    /// <param name="disposing">指示是否正在释放托管资源</param>
    protected virtual void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                // 释放托管资源
            }

            // 释放非托管资源
            _disposed = true;
        }
    }

    /// <summary>
    /// 析构函数，作为资源释放的最后一道防线
    /// </summary>
    ~ViewModelBase()
    {
        Dispose(false);
    }

    /// <summary>
    /// 释放所有资源
    /// </summary>
    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    #endregion
}